package main

import (
	"fmt"
	"github.com/gomodule/redigo/redis"
)

func main() {
	// 1、连接redis
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("redis.Dial err=", err)
		return
	}
	defer conn.Close()
	fmt.Println("conn suc..", conn)

	// 2、通过go向redis写入数据string
	_, errSet := conn.Do("Set", "name", "tom")
	if errSet != nil {
		fmt.Println("set err=", errSet)
		return
	}
	fmt.Println("set操作ok")

	// 3、通过go向redis读取数据string
	res, errGet := redis.String(conn.Do("Get", "name"))
	if errGet != nil {
		fmt.Println("set err=", errGet)
		return
	}
	// 因为返回 r是interface{}
	// 因为name对应的值是string，因此我们需要转换
	// nameString := res.(string) // 不建议用这种方法使用
	fmt.Println("get操作ok:", res)

	//4、使用Hash存放多个值
	_, errHSet := conn.Do("HSet", "user01", "age", 111)
	if errHSet != nil {
		fmt.Println("Hset err=", errHSet)
		return
	}
	Hres, errHGet := redis.String(conn.Do("HGet", "user01", "name"))
	if errHGet != nil {
		fmt.Println("Hget err=", errHGet)
		return
	}
	fmt.Println("Hget操作ok:", Hres)

	// 一次性取回多个值
	HGAres, errHGetAll := redis.Strings(conn.Do("HMGet", "user01", "name", "age"))
	if errHGetAll != nil {
		fmt.Println("Hget err=", errHGetAll)
		return
	}
	fmt.Println("HGAres操作ok:", HGAres)

}
